---@class pipe
---https://nodemcu.readthedocs.io/en/release/modules/pipe/
pipe = {}

---@class pobj
local pobj = {}

---创建一个pipe
---@param cb fun(p:pobj) @可选的读取器回调，当管道被写入时通过node.task.post()调用。如果CB返回一个布尔值，则强制执行重发操作:如果为真则重发，如果为假则不重发。如果返回值为nil或省略，则默认情况下，如果自上次调用以来发生了管道写操作，则重新发布。
---@param task_priority node.task.LOW_PRIORITY|node.task.MEDIUM_PRIORITY|node.task.HIGH_PRIORITY @任务优先级
---@return pobj
function pipe.create(cb, task_priority)
end

---从管道对象读取一条记录。
---@note @注意，如果管道中的最后一条记录缺少分隔符或太短，则仍然返回它，清空管道。
---@param sizeOrChar string|number @如果是numeric，则将从管道返回长度大小的字符串。如果是字符串，则这是一个单独的分隔符，后跟一个可选的“+”标志。分隔符用作记录结束符，将字符流拆分为单独的记录。如果指定了标志“+”，则也将在记录的末尾返回分隔符，否则将丢弃该分隔符。如果省略，则默认为"\n+"
---@return string|nil
function pobj:read(sizeOrChar)
end

---为管道对象返回一个Lua迭代器函数。
---这在Lua Language: For语句中有描述。
---(注意，2.5.4中提到的state和object变量是可选的，默认为nil，所以这符合for迭代器语法，在for中工作，因为它在内部维护state和pobj作为upvalues。
---空的管道只占用最少的RAM资源(空的Lua数组)，和其他数组一样，如果引用它的所有变量超出范围或被覆盖，它将被回收。
---请注意，您创建的任何读取器都将管道引用为upval，因此您需要放弃这些来限定管道数组。
---https://nodemcu.readthedocs.io/en/release/modules/pipe/#pobjreader
---@param sizeOrChar string|number @参考pobj:read
---@return function
function pobj:reader()
end

---将一个字符串写入管道对象的头部。这可以用来取消之前的读取。
---@param s string @任何输入字符串。注意，对于所有Lua字符串，它们可能包含所有字符值，包括"\0"。
---@return nil
function pobj:unread(sizeOrChar)
end

---将字符串写入管道对象。
---@param s string @任何输入字符串。注意，对于所有Lua字符串，它们可能包含所有字符值，包括"\0"。
---@return nil
function pobj:write(s)
end

---返回管道中内部记录的数量。每个记录的长度范围从1到256字节，最常见的情况是完整的块。如果可用字节太少，则只能从管道中提取未读数据，因此，快速估计返回的字符串长度的上限可能是有用的。
---@return number
function pobj:nrec()
end
